home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-68k-src / machines / amiga68k / libsrc / amigalib / createport.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  976b  |  45 lines

  1. #include <exec/ports.h>
  2. #include <exec/memory.h>
  3. #include <clib/alib_protos.h>
  4. #include <proto/exec.h>
  5.  
  6. struct MsgPort *CreatePort(STRPTR name,LONG pri)
  7. {
  8.   struct MsgPort *port;
  9.   UBYTE portsig;
  10.  
  11.   if ((BYTE)(portsig=AllocSignal(-1)) < 0)
  12.     return NULL;
  13.   if (!(port=AllocMem(sizeof(struct MsgPort),MEMF_CLEAR|MEMF_PUBLIC)))
  14.     FreeSignal(portsig);
  15.   else
  16.   {
  17.     port->mp_Node.ln_Type=NT_MSGPORT;
  18.     port->mp_Node.ln_Pri=pri;
  19.     port->mp_Node.ln_Name=name;
  20.     /* done via AllocMem
  21.     port->mp_Flags=PA_SIGNAL;
  22.     */
  23.     port->mp_SigBit=portsig;
  24.     port->mp_SigTask=FindTask(NULL);
  25.     if (port->mp_Node.ln_Name)
  26.       AddPort(port);
  27.     else
  28.       NewList(&port->mp_MsgList);
  29.   }
  30.   return port;
  31. }
  32.  
  33. void DeletePort(struct MsgPort *port)
  34. {
  35.    int i;
  36.  
  37.    if (port->mp_Node.ln_Name != NULL)
  38.      RemPort(port);
  39.    i=-1;
  40.    port->mp_Node.ln_Type=i;
  41.    port->mp_MsgList.lh_Head=(struct Node *)i;
  42.    FreeSignal(port->mp_SigBit);
  43.    FreeMem(port,sizeof(struct MsgPort));
  44. }
  45.